const mongoose = require("mongoose");
//md5是对密码或敏感信息进行加密的方法
const { md5 } = require("tools-factory-tang/salt");
// 引入管理员模型
const { adminsModel } = require("../db/model/admins");

//登录
const login = async ({ username, password }) => {
  password = md5(password); //因为注册的时候密码进行了加密处理，登陆时的密码要加密进行比对
  const adminsModel = mongoose.model("admins");
  //findOne的性能比countDocuments好，findOne找到就返回，而countDocuments要遍历所有的数据
  return await adminsModel.findOne({ username, password });
};
//注册
const reg = async ({ username, password }) => {
  //密码的加密处理
  password = md5(password);
  const adminsModel = mongoose.model("admins");
  return await adminsModel.create({ username, password });
};
// 分页获取管理员数据
const getAdmins = async ({ curPage, eachPage }) => {
  curPage = ~~curPage;
  eachPage = ~~eachPage;
  const data = {
    total: 0,
    maxPage: 0,
    rows: [],
  };
  // 获取当前model映射的集合里面存在的文档总数
  data.total = await adminsModel.countDocuments();
  data.maxPage = Math.ceil(data.total / eachPage);
  // 跳过数据条数
  const skipNum = (curPage - 1) * eachPage;
  // 查询所有数据，并跳过skipnum条，查eachpage条并执行
  data.rows = await adminsModel.find().skip(skipNum).limit(eachPage).exec();
  return data;
};
module.exports = { login, reg, getAdmins };
